#include "../../include/session/Session.hpp"
using namespace http::session;

Session::Session(const std::string &session_id, SessionManager *session_manager, int max_age)
    : _session_id(session_id), _max_age(max_age), _session_manager(session_manager)
{
    Refresh();//初始化会话过期时间
}

const std::string &Session::getSessionId() const
{   
    return _session_id;
}

bool Session::isExpired() const
{
    return std::chrono::system_clock::now() > _expire_time;//如果当前时间大于会话过期时间，则会话过期
}

void Session::Refresh()
{
    _expire_time = std::chrono::system_clock::now() + std::chrono::seconds(_max_age);
}

void Session::SetManager(SessionManager *session_manager)
{
    _session_manager = session_manager;
}

void Session::Set(const std::string &key, const std::string &value)
{
    _session_data[key] = value;
}

const std::string &Session::Get(const std::string &key) const
{
    auto it = _session_data.find(key);
    if (it != _session_data.end())
    {
        return it->second;
    }
    static const std::string empty_string = "";
    return empty_string;
}

void Session::Remove(const std::string &key)
{
    _session_data.erase(key);
}

void Session::Clear()
{
    _session_data.clear();
}